package util;

import org.apache.commons.lang.StringUtils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * Desc: 生成随机数类
 * @author: lisha 2018/5/25 11:53
 */
public class NumHandleHelper {
    /**
     * 生成6位随机数 重复概率比较低
     * @return
     */
    public static String getSixNum() {
        int[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

        //随机对象
        Random rand = new Random();

        //循环产生
        for (int i = 10; i > 1; i--) {
            int index = rand.nextInt(i);
            int tmp = array[index];
            array[index] = array[i - 1];
            array[i - 1] = tmp;
        }

        //拼接结果为字符串
        int result = 0;
        for (int i = 0; i < 6; i++) {
            result = result * 10 + array[i];
        }

        String sixString = Integer.toString(result);
        //有可能出现5位数，前面加0补全
        if (sixString.length() == 5) {
            sixString = "0" + sixString;
        }
        return sixString;
    }

    /**
     * 获取请求编号方法
     * @return 当前毫秒时间戳 + 6位随机数字组成 防止重复
     */
    public static String getRequestNo(){
        return  String.valueOf(System.currentTimeMillis() + NumHandleHelper.getSixNum());
    }

    /**
     * 获取年龄
     *
     * @param idNo 传入身份证号
     * @return age 30 etc
     */
    public static String getAge(String idNo) {
        // 获取年龄
        String age = "0";
        if (StringUtils.isBlank(idNo) || idNo.length() < 15) {
            System.out.println("获取年龄-传入身份证号为空");
            return age;
        }
        try {
            age = null;
            String birthYear = idNo.substring(6, 10);
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy");
            String year = simpleDateFormat.format(new Date());
            age = String.valueOf(Integer.parseInt(year) - Integer.parseInt(birthYear));
        } catch (NumberFormatException e) {
            e.printStackTrace();
            System.out.println("获取年龄异常");
        }
        return age;
    }

    /**
     * 获取性别
     *
     * @param idNo 身份证号
     * @return 性别 男 女
     */
    public static String getSex(String idNo) {

        try {
            if (StringUtils.isBlank(idNo) || idNo.length() < 15) {
                System.out.println("获取性别-传入身份证号为空");
                return "--";
            }
            String id17 = idNo.substring(16, 17);
            if (Integer.parseInt(id17) % 2 != 0) {
                return "男";
            } else {
                return "女";
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
            System.out.println("获取性别异常");
            return "--";
        }
    }
}
